// 这个模块封装了所有对数据库的常用操作
var MongoClient = require('mongodb').MongoClient;
var setting = require("../setting.js") 
 
function _connectDB(callback){  // 封装成内部函数
    var url = setting.dburl;
    MongoClient.connect(url, function(err,db){ //连接数据库
        if(err){
            callback(err,null);
            db.close();            
            return;
        }
        callback(err, db);
    });
}

exports.insertOne = function(collectionName, json, callback){
    _connectDB(function(err,db){//连接数据库之后插入数据
        db.collection(collectionName).insertOne(json,function(err,result){
            callback(err,result); //插入数据后回调函数，再传递回给形参callback
            db.close(); // 关闭数据库
        })
    })
}

// 查找数据
exports.find = function(collectionName,json,C,D){ // 列表名称，查找条件，分页查询，回调函数
    var result = []  // 查询之后的返回的结果数组
    if(arguments.length == 3){ //不传第三个参数的时候，那么就默认查询全部
        var callback = C;  // 回调
        var skipnumber = 0;
        var limit = 0
    }else if(arguments.length == 4){ // 如果都传递了参数，那么按照条件分页查询
        var callback = D;
        var args = C;
        var skipnumber = args.pageamount * args.page || 0;  // 该省略的条数
        var limit = args.pageamount || 0; // 数目限制
        var sort = args.sort || {};         // 排序方式
    }else{
        throw new Error("find函数的参数个数，必须是三个或者是四个");
        return;
    }
    _connectDB(function(err,db){ // 连接数据库之后调用查询数据
        // 按照时间进行逆序排序内容
        var cursor = db.collection(collectionName).find(json).skip(skipnumber).limit(limit).sort(sort);  // 游标
        cursor.each(function(err,doc){
            if(err){
                callback(err,null);
                db.close();                
                return;
            }
            if(doc != null){
                result.push(doc);  // 放入结果数组
            } else{
                callback(null,result) //遍历结束，没有更多的文档了
                db.close()
            }
        })
    })
}

// 删除数据
exports.deleteMany = function(collectionName,json,callback){
    _connectDB(function(err,db){
        db.collection(collectionName).deleteMany(
            json,
            function(err,results){
                callback(err,results);
                db.close();
        })
    })
}

// 修改
exports.updateMany = function(collectionName,json1,json2,callback){
    _connectDB(function(err,db){
        db.collection(collectionName).updateMany(
            json1,
            json2,
            function(err,results){
                callback(err,results);
                db.close();
            }
        )
    })
}

// 获取数量
exports.getAllCount = function(collectionName,callback){
    _connectDB(function(err,db){
        db.collection(collectionName).count({}).then(function(count){
            callback(count);
            db.close();
        })
    })
}

init();
function init(){
    _connectDB(function(err,db){
        if(err){
            return;
        }
    db.collection("users").createIndex(
        {"username" : 1},               // 正序建立索引
        null,
        function(err,results){
            
        })
    });
}        
